function [result_image] = thresholding(original_image, result_bits, threshold)
% THRESHOLDING

% Algoritmo base
% - Quantizza i pixel dell'immagine in funzione dei bit disponibili

% Profondita' in bit dell'immagine originale
original_bits = 8;
original_levels = 2^original_bits-1;

% Setto il numero di bit dell'immagine in uscita (< di quello in entrata)
result_levels = 2^result_bits-1;

% Creo il frame dell'immagine risultante
result_image = zeros(size(original_image, 1),...
    size(original_image, 2),...
    size(original_image, 3));

% Denormalizzo il threshold
threshold = threshold * original_levels;

% ALGORITMO
% per ogni canale colore
for c = 1:size(original_image, 3)

    % per ogni y (da sopra a sotto)
    for y = 2:size(result_image, 1)-1

        % per ogni x (da sinistra a destra)
        for x = 2:size(result_image, 2)-1

            % prendo il pixel originale
            old_pixel = original_image(y,x,c);

            % quantizzo il pixel
            if(old_pixel < threshold)
                new_pixel = floor(double(old_pixel) *...
                    (result_levels/original_levels)) *...
                    (original_levels/result_levels);
            else
                new_pixel = ceil(double(old_pixel) *...
                    (result_levels/original_levels)) *...
                    (original_levels/result_levels);
            end
            
            result_image(y,x,c) = new_pixel;
        end
    end
end

end